The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Changes 010
MANIFEST 04
META.json 45
META.yml 45
Makefile.PL 45
README 11
SIGNATURE 124128
TODO 10
dist.ini 23
lib/HTML/FormHandler/Base.pm 11
lib/HTML/FormHandler/BuildFields.pm 73
lib/HTML/FormHandler/BuildPages.pm 11
lib/HTML/FormHandler/Field/Boolean.pm 11
lib/HTML/FormHandler/Field/Button.pm 11
lib/HTML/FormHandler/Field/Captcha.pm 11
lib/HTML/FormHandler/Field/Checkbox.pm 11
lib/HTML/FormHandler/Field/Compound.pm 11
lib/HTML/FormHandler/Field/Date.pm 11
lib/HTML/FormHandler/Field/DateMDY.pm 11
lib/HTML/FormHandler/Field/DateTime.pm 11
lib/HTML/FormHandler/Field/Display.pm 11
lib/HTML/FormHandler/Field/Duration.pm 11
lib/HTML/FormHandler/Field/Email.pm 11
lib/HTML/FormHandler/Field/Hidden.pm 11
lib/HTML/FormHandler/Field/Hour.pm 11
lib/HTML/FormHandler/Field/HtmlArea.pm 11
lib/HTML/FormHandler/Field/IntRange.pm 11
lib/HTML/FormHandler/Field/Integer.pm 11
lib/HTML/FormHandler/Field/Minute.pm 11
lib/HTML/FormHandler/Field/Money.pm 11
lib/HTML/FormHandler/Field/Month.pm 11
lib/HTML/FormHandler/Field/MonthDay.pm 11
lib/HTML/FormHandler/Field/MonthName.pm 11
lib/HTML/FormHandler/Field/Multiple.pm 118
lib/HTML/FormHandler/Field/Nested.pm 11
lib/HTML/FormHandler/Field/NoValue.pm 11
lib/HTML/FormHandler/Field/Password.pm 11
lib/HTML/FormHandler/Field/PasswordConf.pm 11
lib/HTML/FormHandler/Field/PosInteger.pm 11
lib/HTML/FormHandler/Field/PrimaryKey.pm 11
lib/HTML/FormHandler/Field/Repeatable/Instance.pm 11
lib/HTML/FormHandler/Field/Repeatable.pm 13
lib/HTML/FormHandler/Field/Reset.pm 11
lib/HTML/FormHandler/Field/Result.pm 11
lib/HTML/FormHandler/Field/Second.pm 11
lib/HTML/FormHandler/Field/Select.pm 447
lib/HTML/FormHandler/Field/Submit.pm 11
lib/HTML/FormHandler/Field/Text.pm 11
lib/HTML/FormHandler/Field/TextArea.pm 11
lib/HTML/FormHandler/Field/Upload.pm 11
lib/HTML/FormHandler/Field/Weekday.pm 11
lib/HTML/FormHandler/Field/Year.pm 11
lib/HTML/FormHandler/Field.pm 148
lib/HTML/FormHandler/Fields.pm 52
lib/HTML/FormHandler/I18N/de_de.pm 11
lib/HTML/FormHandler/I18N/en_us.pm 11
lib/HTML/FormHandler/I18N/hu_hu.pm 11
lib/HTML/FormHandler/I18N/ru_ru.pm 11
lib/HTML/FormHandler/I18N/tr_tr.pm 11
lib/HTML/FormHandler/I18N/ua_ua.pm 11
lib/HTML/FormHandler/I18N.pm 11
lib/HTML/FormHandler/InitResult.pm 28
lib/HTML/FormHandler/Manual/Catalyst.pod 11
lib/HTML/FormHandler/Manual/Cookbook.pod 136
lib/HTML/FormHandler/Manual/Intro.pod 11
lib/HTML/FormHandler/Manual/Reference.pod 11
lib/HTML/FormHandler/Manual/Rendering.pod 11
lib/HTML/FormHandler/Manual/Templates.pod 11
lib/HTML/FormHandler/Manual/Tutorial.pod 11
lib/HTML/FormHandler/Manual.pod 11
lib/HTML/FormHandler/Meta/Role.pm 11
lib/HTML/FormHandler/Model/CDBI.pm 11
lib/HTML/FormHandler/Model/Object.pm 11
lib/HTML/FormHandler/Model.pm 11
lib/HTML/FormHandler/Moose/Role.pm 11
lib/HTML/FormHandler/Moose.pm 11
lib/HTML/FormHandler/Page/Simple.pm 11
lib/HTML/FormHandler/Page.pm 11
lib/HTML/FormHandler/Pages.pm 11
lib/HTML/FormHandler/Params.pm 11
lib/HTML/FormHandler/Render/Simple.pm 11
lib/HTML/FormHandler/Render/Table.pm 11
lib/HTML/FormHandler/Render/WithTT.pm 11
lib/HTML/FormHandler/Result/Role.pm 11
lib/HTML/FormHandler/Result.pm 11
lib/HTML/FormHandler/TraitFor/Captcha.pm 11
lib/HTML/FormHandler/TraitFor/I18N.pm 11
lib/HTML/FormHandler/Traits.pm 11
lib/HTML/FormHandler/Types.pm 11
lib/HTML/FormHandler/Validate.pm 11
lib/HTML/FormHandler/Widget/ApplyRole.pm 11
lib/HTML/FormHandler/Widget/Field/Button.pm 22
lib/HTML/FormHandler/Widget/Field/Checkbox.pm 11
lib/HTML/FormHandler/Widget/Field/CheckboxGroup.pm 11
lib/HTML/FormHandler/Widget/Field/Compound.pm 11
lib/HTML/FormHandler/Widget/Field/Hidden.pm 11
lib/HTML/FormHandler/Widget/Field/NoRender.pm 11
lib/HTML/FormHandler/Widget/Field/Password.pm 11
lib/HTML/FormHandler/Widget/Field/RadioGroup.pm 11
lib/HTML/FormHandler/Widget/Field/Repeatable.pm 11
lib/HTML/FormHandler/Widget/Field/Reset.pm 11
lib/HTML/FormHandler/Widget/Field/Role/HTMLAttributes.pm 11
lib/HTML/FormHandler/Widget/Field/Role/SelectedOption.pm 11
lib/HTML/FormHandler/Widget/Field/Select.pm 11
lib/HTML/FormHandler/Widget/Field/Submit.pm 11
lib/HTML/FormHandler/Widget/Field/Text.pm 11
lib/HTML/FormHandler/Widget/Field/Textarea.pm 11
lib/HTML/FormHandler/Widget/Field/Upload.pm 11
lib/HTML/FormHandler/Widget/Form/Role/HTMLAttributes.pm 11
lib/HTML/FormHandler/Widget/Form/Simple.pm 11
lib/HTML/FormHandler/Widget/Form/Table.pm 11
lib/HTML/FormHandler/Widget/Wrapper/Base.pm 11
lib/HTML/FormHandler/Widget/Wrapper/Fieldset.pm 11
lib/HTML/FormHandler/Widget/Wrapper/None.pm 11
lib/HTML/FormHandler/Widget/Wrapper/Simple.pm 48
lib/HTML/FormHandler/Widget/Wrapper/SimpleInline.pm 069
lib/HTML/FormHandler/Widget/Wrapper/Table.pm 11
lib/HTML/FormHandler/Widget/Wrapper/TableInline.pm 051
lib/HTML/FormHandler/Wizard.pm 11
lib/HTML/FormHandler.pm 116
t/circular_refs.t 049
t/errors.t 02
t/field_traits.t 030
t/form_options.t 029
t/render_widgets.t 032
t/rep_nest.t 0215
126 files changed (This is a version diff) 300867
@@ -1,3 +1,13 @@
+0.34001 Mon May 16, 2011
+    Fiz another memory cycle using Select field
+    Tweak code creating results for Field testing
+
+0.34000 Mon May 16, 2011
+    Fixed memory cycles; 1 in HFH code, others by requiring Moose 2.0007
+    Localize value of a button
+    Allow limited use of has_many multiple select
+    Add SimpleInline & TableInline widgets to not wrap compound fields
+
 0.33002 Tues Feb 22, 2011
     Accidentally left off compatibility for 'required_message' attribute
         messages => { required => '...' } is new style and worked
@@ -116,7 +116,9 @@ lib/HTML/FormHandler/Widget/Wrapper/Base.pm
 lib/HTML/FormHandler/Widget/Wrapper/Fieldset.pm
 lib/HTML/FormHandler/Widget/Wrapper/None.pm
 lib/HTML/FormHandler/Widget/Wrapper/Simple.pm
+lib/HTML/FormHandler/Widget/Wrapper/SimpleInline.pm
 lib/HTML/FormHandler/Widget/Wrapper/Table.pm
+lib/HTML/FormHandler/Widget/Wrapper/TableInline.pm
 lib/HTML/FormHandler/Wizard.pm
 share/templates/form.tt
 share/templates/widget/button.tt
@@ -136,6 +138,7 @@ share/templates/widget/textarea.tt
 share/templates/widget/upload.tt
 t/01app.t
 t/build_id.t
+t/circular_refs.t
 t/composed.t
 t/compound_field.t
 t/constraints.t
@@ -188,6 +191,7 @@ t/render_result.t
 t/render_table.t
 t/render_widgets.t
 t/render_withtt.t
+t/rep_nest.t
 t/reprender.t
 t/req_message.t
 t/result.t
@@ -4,7 +4,7 @@
       "FormHandler Contributors - see HTML::FormHandler"
    ],
    "dynamic_config" : 0,
-   "generated_by" : "Dist::Zilla version 4.102342, CPAN::Meta::Converter version 2.101670",
+   "generated_by" : "Dist::Zilla version 4.200006, CPAN::Meta::Converter version 2.101670",
    "license" : [
       "perl_5"
    ],
@@ -16,7 +16,7 @@
    "prereqs" : {
       "configure" : {
          "requires" : {
-            "ExtUtils::MakeMaker" : "6.31",
+            "ExtUtils::MakeMaker" : "6.30",
             "File::ShareDir::Install" : "0.03"
          }
       },
@@ -29,7 +29,7 @@
             "File::ShareDir" : 0,
             "File::Spec" : 0,
             "Locale::Maketext" : "1.09",
-            "Moose" : "0.90",
+            "Moose" : "2.0007",
             "MooseX::Getopt" : "0.16",
             "MooseX::Types" : "0.20",
             "MooseX::Types::Common" : 0,
@@ -42,6 +42,7 @@
          "requires" : {
             "Test::Differences" : 0,
             "Test::Exception" : 0,
+            "Test::Memory::Cycle" : "1.04",
             "Test::More" : "0.94"
          }
       }
@@ -58,6 +59,6 @@
          "web" : "http://github.com/gshank/html-formhandler"
       }
    },
-   "version" : "0.33002"
+   "version" : "0.34001"
 }
 
@@ -5,12 +5,13 @@ author:
 build_requires:
   Test::Differences: 0
   Test::Exception: 0
+  Test::Memory::Cycle: 1.04
   Test::More: 0.94
 configure_requires:
-  ExtUtils::MakeMaker: 6.31
+  ExtUtils::MakeMaker: 6.30
   File::ShareDir::Install: 0.03
 dynamic_config: 0
-generated_by: 'Dist::Zilla version 4.102342, CPAN::Meta::Converter version 2.101670'
+generated_by: 'Dist::Zilla version 4.200006, CPAN::Meta::Converter version 2.101670'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -24,7 +25,7 @@ requires:
   File::ShareDir: 0
   File::Spec: 0
   Locale::Maketext: 1.09
-  Moose: 0.90
+  Moose: 2.0007
   MooseX::Getopt: 0.16
   MooseX::Types: 0.20
   MooseX::Types::Common: 0
@@ -34,4 +35,4 @@ requires:
 resources:
   bugtracker: https://rt.cpan.org/Public/Dist/Display.html?Name=HTML-FormHandler
   repository: git://github.com/gshank/html-formhandler.git
-version: 0.33002
+version: 0.34001
@@ -4,7 +4,7 @@ use warnings;
 
 
 
-use ExtUtils::MakeMaker 6.31;
+use ExtUtils::MakeMaker 6.30;
 
 use File::ShareDir::Install;
 install_share dist => "share";
@@ -16,10 +16,11 @@ my %WriteMakefileArgs = (
   'BUILD_REQUIRES' => {
     'Test::Differences' => '0',
     'Test::Exception' => '0',
+    'Test::Memory::Cycle' => '1.04',
     'Test::More' => '0.94'
   },
   'CONFIGURE_REQUIRES' => {
-    'ExtUtils::MakeMaker' => '6.31',
+    'ExtUtils::MakeMaker' => '6.30',
     'File::ShareDir::Install' => '0.03'
   },
   'DISTNAME' => 'HTML-FormHandler',
@@ -34,7 +35,7 @@ my %WriteMakefileArgs = (
     'File::ShareDir' => '0',
     'File::Spec' => '0',
     'Locale::Maketext' => '1.09',
-    'Moose' => '0.90',
+    'Moose' => '2.0007',
     'MooseX::Getopt' => '0.16',
     'MooseX::Types' => '0.20',
     'MooseX::Types::Common' => '0',
@@ -42,7 +43,7 @@ my %WriteMakefileArgs = (
     'aliased' => '0',
     'namespace::autoclean' => '0.09'
   },
-  'VERSION' => '0.33002',
+  'VERSION' => '0.34001',
   'test' => {
     'TESTS' => 't/*.t'
   }
@@ -1,7 +1,7 @@
 
 
 This archive contains the distribution HTML-FormHandler,
-version 0.33002:
+version 0.34001:
 
   HTML forms using Moose
 
@@ -14,125 +14,127 @@ not run its Makefile.PL or Build.PL.
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA256
 
-SHA1 d14e8e9fc6fbac183e1d1fddc14a956fcf4b74d1 Changes
+SHA1 5ca5696da88d5612177ebb5c399d6e3ee1f29c84 Changes
 SHA1 2972c49b6d6e4d8bcc3360a734ee629ac16c6d8c INSTALL
 SHA1 2f0045ac3d6d539f73a61360de049b2f7fe349d0 LICENSE
-SHA1 3720844e257bc36d4166e365dd783796c8563b4d MANIFEST
-SHA1 335e0e47a8d209732120387a76938c0d6a54e649 META.json
-SHA1 675a79e8ee1cb443123e872b9a581b63cbb702a0 META.yml
-SHA1 4269d0e8c8aa7855ed616ef598b95907018b8cf6 Makefile.PL
-SHA1 33f7e434cad928d29cd8e4334933a77f8d545a84 README
-SHA1 9c75a76544c78425259a49fd974062c1a0513ffc TODO
-SHA1 0547dd36c3eb4d8c89a04b656aac51c4318e989c dist.ini
-SHA1 c0f378323095e6268714d3b43aaf09db546bdd19 lib/HTML/FormHandler.pm
-SHA1 3fba61d0857c99fe60a0fda24808d3d955830b58 lib/HTML/FormHandler/Base.pm
-SHA1 55428f2c4e0990373508f8b3e37f7dc06f4b6f63 lib/HTML/FormHandler/BuildFields.pm
-SHA1 cb3842019ca5156843095a7214f34d9ac9794339 lib/HTML/FormHandler/BuildPages.pm
-SHA1 f83ecfccbe31f7a82fb6ee27e800f39870b517f7 lib/HTML/FormHandler/Field.pm
-SHA1 32dc7e1bb76025afc7a8255caa640efe74153ad2 lib/HTML/FormHandler/Field/Boolean.pm
-SHA1 b099c34e6aabb5e2aa37aca032e6f31ca287f953 lib/HTML/FormHandler/Field/Button.pm
-SHA1 0873c6b08b04c881b495deeb0090fbda3c3fc5e7 lib/HTML/FormHandler/Field/Captcha.pm
-SHA1 699cdaf5fab16ab87c9927cfce96db25be75b1c9 lib/HTML/FormHandler/Field/Checkbox.pm
-SHA1 168aac94fde66240c2b517f21de58204fac74c4d lib/HTML/FormHandler/Field/Compound.pm
-SHA1 32fa5eb9602833e53ef5e6e37618bc4b6f5a88a4 lib/HTML/FormHandler/Field/Date.pm
-SHA1 ac61babbcdf691c1ccf94fe913579730e54b3de7 lib/HTML/FormHandler/Field/DateMDY.pm
-SHA1 223685995dc023012899793b8c29318d347d1d83 lib/HTML/FormHandler/Field/DateTime.pm
-SHA1 082d0858c1c3c9fbc6fc24fbb7b8da5cc7888ba4 lib/HTML/FormHandler/Field/Display.pm
-SHA1 a425f075439b5de6377f646ec830414c00ba5434 lib/HTML/FormHandler/Field/Duration.pm
-SHA1 1d9d58138b68e93d323a9244fd0165868e4b71af lib/HTML/FormHandler/Field/Email.pm
-SHA1 b58f697ce1b443dc7b68122d599034b2838e515c lib/HTML/FormHandler/Field/Hidden.pm
-SHA1 558bd7783b48d462fdd77998a408d9f18c036c41 lib/HTML/FormHandler/Field/Hour.pm
-SHA1 6f59180e5e8893c54e3f440c85593484cfdb2c52 lib/HTML/FormHandler/Field/HtmlArea.pm
-SHA1 c686b65d25eaece5dd300e5cec7e9df2d9bb1a10 lib/HTML/FormHandler/Field/IntRange.pm
-SHA1 9a5303d42557e1e8553cdc4d325c2a1bb15db5a6 lib/HTML/FormHandler/Field/Integer.pm
-SHA1 521021032692e1f8ddc55061096b6b3d09fb1d26 lib/HTML/FormHandler/Field/Minute.pm
-SHA1 7a8154afdadb904e0002455cdc76d3505cba8c5b lib/HTML/FormHandler/Field/Money.pm
-SHA1 6288747fa15b069fca580c876b41e0267f97db73 lib/HTML/FormHandler/Field/Month.pm
-SHA1 df591283105e059281780f051d8d8346c9ee9ed2 lib/HTML/FormHandler/Field/MonthDay.pm
-SHA1 1188c40b32d6f33a2a5c4f997961c20668c7f9b1 lib/HTML/FormHandler/Field/MonthName.pm
-SHA1 da41ca10d3efcd34a93fcffe69e6a9f5317a97ca lib/HTML/FormHandler/Field/Multiple.pm
-SHA1 2e4fcc1e7ae06468a67db88c0647c2c3ad4bc0a6 lib/HTML/FormHandler/Field/Nested.pm
-SHA1 5f4e5e13f48855bb5a442546eed630105dd639cf lib/HTML/FormHandler/Field/NoValue.pm
-SHA1 572f0f818dc087dbc8d6f348213843f1aa7e880a lib/HTML/FormHandler/Field/Password.pm
-SHA1 f706fd7187773477aa1cd929b7eb7f3857f2a106 lib/HTML/FormHandler/Field/PasswordConf.pm
-SHA1 502d61af46e6c85eb4c2a37fbc9c3c00e6568518 lib/HTML/FormHandler/Field/PosInteger.pm
-SHA1 171a36712107e1a0c037624b055c909bf128a00f lib/HTML/FormHandler/Field/PrimaryKey.pm
-SHA1 4a3273fd9299a6399d009328c822ab591778a460 lib/HTML/FormHandler/Field/Repeatable.pm
-SHA1 9dcd7940e23aae83827727129292464c03d4d6e9 lib/HTML/FormHandler/Field/Repeatable/Instance.pm
-SHA1 221b74348560daa1df8649c2646ec612e3757185 lib/HTML/FormHandler/Field/Reset.pm
-SHA1 9240d49cd600c8c462473c87c832596b561ed95e lib/HTML/FormHandler/Field/Result.pm
-SHA1 f2d5ccf0bc9d0e09f04cbd39b1af2df7338c77f8 lib/HTML/FormHandler/Field/Second.pm
-SHA1 957d52341e5a775450e0314f5842a7830e6bf8d2 lib/HTML/FormHandler/Field/Select.pm
-SHA1 e0389dc94dd60ca12db1e4f84320327434a81d65 lib/HTML/FormHandler/Field/Submit.pm
-SHA1 4c2575c80e69049394b7926609ee06b6bcb52e1f lib/HTML/FormHandler/Field/Text.pm
-SHA1 f9cb41cf9da835542ec65ae6d59d6b5e89bdcf49 lib/HTML/FormHandler/Field/TextArea.pm
-SHA1 bad1dbcbf68aedcde946dfcd84983024493fa345 lib/HTML/FormHandler/Field/Upload.pm
-SHA1 2517e54944789dc58523525d8e2d721129e0e997 lib/HTML/FormHandler/Field/Weekday.pm
-SHA1 ae1732acba7c4b10e7407fcac956ced11b289996 lib/HTML/FormHandler/Field/Year.pm
-SHA1 53cec2c6ca63d93d49a4e95a2220ef2c402716e6 lib/HTML/FormHandler/Fields.pm
-SHA1 8be7e3128f6e661347bfdae9125a25ed1ae8a9a6 lib/HTML/FormHandler/I18N.pm
-SHA1 77094944d93018b05da4067723b0c3d7f2fb2046 lib/HTML/FormHandler/I18N/de_de.pm
-SHA1 896ba86260563ca53d60b368917ba0c7bfab1b15 lib/HTML/FormHandler/I18N/en_us.pm
-SHA1 0f79dd5c903918ad581bbf7e4c3e1c21694096b4 lib/HTML/FormHandler/I18N/hu_hu.pm
-SHA1 290808fc64fcbdddc7ee7d8a111b462af59c6645 lib/HTML/FormHandler/I18N/ru_ru.pm
-SHA1 5e89c2719918a8b473082ecf683cba5776885aa0 lib/HTML/FormHandler/I18N/tr_tr.pm
-SHA1 3ba6cfda70c887a90130785a45a0c864c9a0329e lib/HTML/FormHandler/I18N/ua_ua.pm
-SHA1 185cf57fddc48db09a931e59bbd2e385eb5cd764 lib/HTML/FormHandler/InitResult.pm
-SHA1 63aca1e348928befd04b77bb2a68f687b56dbb89 lib/HTML/FormHandler/Manual.pod
-SHA1 58892dab2bd7a671ebe285f0560bd14695687554 lib/HTML/FormHandler/Manual/Catalyst.pod
-SHA1 55db97c971ca6029a0f8630279e87cdc441a39b5 lib/HTML/FormHandler/Manual/Cookbook.pod
-SHA1 f08f762c55dc47e064914f519b3907a2718a2dd1 lib/HTML/FormHandler/Manual/Intro.pod
-SHA1 c10dc12a3ffccac460801024299a028beab6cdee lib/HTML/FormHandler/Manual/Reference.pod
-SHA1 da73055a1202b1ebd910de627fa6b1af157700de lib/HTML/FormHandler/Manual/Rendering.pod
-SHA1 cb27b57ac0ebd2532e0e867ec5619571b5f30f53 lib/HTML/FormHandler/Manual/Templates.pod
-SHA1 bf9f55c9a00ebeafcc50cd44fc91dfc049ab3660 lib/HTML/FormHandler/Manual/Tutorial.pod
-SHA1 69e173befe88ac910574eeb0b3d36691fb7da8a0 lib/HTML/FormHandler/Meta/Role.pm
-SHA1 d45d9b34089f2e43c09f6fd46d74c1635403a3ae lib/HTML/FormHandler/Model.pm
-SHA1 1f5cf71d32e65aa6fe3f00ffed285d7d28e6992b lib/HTML/FormHandler/Model/CDBI.pm
-SHA1 fb36014d688a7fce9843459a8250f745faa634fa lib/HTML/FormHandler/Model/Object.pm
-SHA1 73f14e557ade9a7be49da217ea4a5ece01bdee9c lib/HTML/FormHandler/Moose.pm
-SHA1 467245f240fb5f1499c38bd61dd1678c72676b58 lib/HTML/FormHandler/Moose/Role.pm
-SHA1 3f5a395f1e7facc21945f191af5b7a27632bbba0 lib/HTML/FormHandler/Page.pm
-SHA1 1fa2e4ae99bfa85e670c4fece91d0e0bb337e6b3 lib/HTML/FormHandler/Page/Simple.pm
-SHA1 d83c1990d21c1ed190403a6f1f79ff93431aea1a lib/HTML/FormHandler/Pages.pm
-SHA1 a5528b4b5d5bf05f89478c4aaa52250b666dbe9d lib/HTML/FormHandler/Params.pm
-SHA1 6b124c5da6f1da6110703b879524900bf536f952 lib/HTML/FormHandler/Render/Simple.pm
-SHA1 e8b58475e8de222fcbb2b202cb9bb9fb24117540 lib/HTML/FormHandler/Render/Table.pm
-SHA1 1a7d832c13cbfbe59d43744786f3896a5e385072 lib/HTML/FormHandler/Render/WithTT.pm
-SHA1 fb6bc157c7965ace13a266a1e7275910085cfafe lib/HTML/FormHandler/Result.pm
-SHA1 7bb33ba2159cab4cd260c8571fde1576d731cca7 lib/HTML/FormHandler/Result/Role.pm
-SHA1 555ca0d89591991b2b954922d8c153be38975bf8 lib/HTML/FormHandler/TraitFor/Captcha.pm
-SHA1 0c9e8bec614b7da0c8ee3b10ab3440bf91543a95 lib/HTML/FormHandler/TraitFor/I18N.pm
-SHA1 5cb21c1fcc8c9693ebc52d2bd1a6a4c475cb40e1 lib/HTML/FormHandler/Traits.pm
-SHA1 09afd0e3be6c535dbd90a60698667e4e296e4371 lib/HTML/FormHandler/Types.pm
-SHA1 8cf0462536dbf08d7420e4bc2298e6fa2961bfec lib/HTML/FormHandler/Validate.pm
-SHA1 73538b7cf92921725dcb0e015737657b8462e7ba lib/HTML/FormHandler/Widget/ApplyRole.pm
-SHA1 53e9f892da92f64605453f8d63f3ef5679268de0 lib/HTML/FormHandler/Widget/Field/Button.pm
-SHA1 04e6e255656b61792fe0bf0610d90c8fb9ef404f lib/HTML/FormHandler/Widget/Field/Checkbox.pm
-SHA1 7c7c77c6cb7bcae0e00bbbaee3ee98b7115103cf lib/HTML/FormHandler/Widget/Field/CheckboxGroup.pm
-SHA1 65226b92d451d99f4ee43d40256c8b5c4d52f287 lib/HTML/FormHandler/Widget/Field/Compound.pm
-SHA1 1302519ca670c2cc988d31055d4af6690d94b45d lib/HTML/FormHandler/Widget/Field/Hidden.pm
-SHA1 8a953ea2cd8dc3838bc68cfcaf058f42b9ef80a5 lib/HTML/FormHandler/Widget/Field/NoRender.pm
-SHA1 9ddb22ee2177f111f160cf7acb068ef714379bfd lib/HTML/FormHandler/Widget/Field/Password.pm
-SHA1 c01ff5758e6cd2f60093c0d4b677a2d84aa92d1c lib/HTML/FormHandler/Widget/Field/RadioGroup.pm
-SHA1 8def9124d89bb2b34dc0909f5976cfb1f9315f84 lib/HTML/FormHandler/Widget/Field/Repeatable.pm
-SHA1 fb937822ee8c395851676cbebb4b644b4700a78e lib/HTML/FormHandler/Widget/Field/Reset.pm
-SHA1 bf5461ee158960b51649f0be80884c765ae202cd lib/HTML/FormHandler/Widget/Field/Role/HTMLAttributes.pm
-SHA1 d475662749b431ff5f7389ca8092bb72938aaf93 lib/HTML/FormHandler/Widget/Field/Role/SelectedOption.pm
-SHA1 b74c9756f45186bdc0c3dd3f97e448eef8194851 lib/HTML/FormHandler/Widget/Field/Select.pm
-SHA1 d69074280ad56b879ecebc0b55c67a339624d8a1 lib/HTML/FormHandler/Widget/Field/Submit.pm
-SHA1 acaa10d8b0b1bb5c9d13a48ac14400b07fcd7e63 lib/HTML/FormHandler/Widget/Field/Text.pm
-SHA1 31fbe4181c565e96ee2d4d7cf4d5f52d985ed30f lib/HTML/FormHandler/Widget/Field/Textarea.pm
-SHA1 1dd879a0d29176623139dedf14bb234f1772c5c9 lib/HTML/FormHandler/Widget/Field/Upload.pm
-SHA1 05dfa4d2ed83c91a19196ae4ab6507a1f4cbb865 lib/HTML/FormHandler/Widget/Form/Role/HTMLAttributes.pm
-SHA1 0bb184413b46c1daa3604bd867b435956ba4f74f lib/HTML/FormHandler/Widget/Form/Simple.pm
-SHA1 382ce42e2180ec41a29bf6427b05fe1e6c5ed94e lib/HTML/FormHandler/Widget/Form/Table.pm
-SHA1 ed4cef98da6ac7000fda756a7809090d8b51ad34 lib/HTML/FormHandler/Widget/Wrapper/Base.pm
-SHA1 77f1de33691a6540d0f08699b177161fc022156f lib/HTML/FormHandler/Widget/Wrapper/Fieldset.pm
-SHA1 1ba2c34f445b2772021718cefdfc0aa2a9c1006d lib/HTML/FormHandler/Widget/Wrapper/None.pm
-SHA1 a7d4461cbb72d1a27c8fd125741c51d660029b9c lib/HTML/FormHandler/Widget/Wrapper/Simple.pm
-SHA1 69bc715ad29361e75792587d4d101f3aa8f4d239 lib/HTML/FormHandler/Widget/Wrapper/Table.pm
-SHA1 f97d466ce5e0747d2b61122faa7f9abf610942ba lib/HTML/FormHandler/Wizard.pm
+SHA1 b62ee117cdf78b14ae7641b9cf178a1af74dc586 MANIFEST
+SHA1 8e8d2227b2bcc4d3eedd73160a24d807d9f31e07 META.json
+SHA1 5f1309bfd1e1568b4a18ea3de76ea56dbc05d52d META.yml
+SHA1 59c5ca19e6ee2043aa7bb20975c836a3718b54ee Makefile.PL
+SHA1 a33e24d39750650a30b15f782cd7f18bcf09b010 README
+SHA1 62a27d3618068dd20f965d6fcacf1208450bf4df TODO
+SHA1 fb6f20616fba1429f6db808967d5a9081637e80d dist.ini
+SHA1 aedc3333bfef7c628e16dc837adda0e9a31b76d1 lib/HTML/FormHandler.pm
+SHA1 00ae1450a85066c7c5222e20815fe7c89d888816 lib/HTML/FormHandler/Base.pm
+SHA1 4a5a432af643da9a829fab0b028b654590f16343 lib/HTML/FormHandler/BuildFields.pm
+SHA1 7cefad5e56495649d9329b4e80fbb574f2c64dbe lib/HTML/FormHandler/BuildPages.pm
+SHA1 8a83b45a01fe5241b2a3ea9067b838f5b34c2987 lib/HTML/FormHandler/Field.pm
+SHA1 8c835713345818a64f5643307e30bec944a5a100 lib/HTML/FormHandler/Field/Boolean.pm
+SHA1 72b23e02219f9bc6d493ab81734835e36d821932 lib/HTML/FormHandler/Field/Button.pm
+SHA1 65713926510dcb19987285cef8a0af553acdebbe lib/HTML/FormHandler/Field/Captcha.pm
+SHA1 62bcba46605981bc66c83d501c6274e4e59f3e4e lib/HTML/FormHandler/Field/Checkbox.pm
+SHA1 23ab6d5ba2c575fba8be9a03fee28e90bb9ec239 lib/HTML/FormHandler/Field/Compound.pm
+SHA1 a42da7b49c37658890c1af3547ac26fe16517d42 lib/HTML/FormHandler/Field/Date.pm
+SHA1 65e25446083852aec5c49d2ab5b047f31f2e3fdd lib/HTML/FormHandler/Field/DateMDY.pm
+SHA1 c38658a8b08d15e521a90f5dbc15960f4c670702 lib/HTML/FormHandler/Field/DateTime.pm
+SHA1 cefe5e43c3fb78f42282227cd1d139837aa42a6c lib/HTML/FormHandler/Field/Display.pm
+SHA1 b76ea502b441903f76c88a20d6a18a3efd82b623 lib/HTML/FormHandler/Field/Duration.pm
+SHA1 6324bf746f85e5d73fab43605e96e26fc955a04c lib/HTML/FormHandler/Field/Email.pm
+SHA1 783f5d390c48b57cfabce2232fead9316f09638a lib/HTML/FormHandler/Field/Hidden.pm
+SHA1 842d2715c800b44a241ba1f5a1fd6d08818c570c lib/HTML/FormHandler/Field/Hour.pm
+SHA1 c5c60a044e5d9d70fbd0b084f303014c8a8194b9 lib/HTML/FormHandler/Field/HtmlArea.pm
+SHA1 10a462148d55a6b0602174cac753649aa621a814 lib/HTML/FormHandler/Field/IntRange.pm
+SHA1 99fa19eeacc2d32df99cbee749bfd48e8cfe9b4f lib/HTML/FormHandler/Field/Integer.pm
+SHA1 e9bbddd5553154e94a0fdca747e1e98e0ba17475 lib/HTML/FormHandler/Field/Minute.pm
+SHA1 76dd471fa64c85d55210d5b7b08e646f0eca708a lib/HTML/FormHandler/Field/Money.pm
+SHA1 efdbd7246419d73e538eb7f7e5c5b08a858b3cf1 lib/HTML/FormHandler/Field/Month.pm
+SHA1 8c03d055debd0940a7ac58e46cf9d2ee79a37246 lib/HTML/FormHandler/Field/MonthDay.pm
+SHA1 6f2ec3241763156eb757302cfd255593fd4a8f7d lib/HTML/FormHandler/Field/MonthName.pm
+SHA1 99348640b0f8201b9cf4307f240b705f8aa13527 lib/HTML/FormHandler/Field/Multiple.pm
+SHA1 bccc279f227a799cebe6c39d3ab81a6014ad96d7 lib/HTML/FormHandler/Field/Nested.pm
+SHA1 ba76ac84f56a743bacd96051bac97ab90b0e28df lib/HTML/FormHandler/Field/NoValue.pm
+SHA1 2a0274ba40124ea913ad6404b2d9cc9ec85a43da lib/HTML/FormHandler/Field/Password.pm
+SHA1 92ced9712c0ae058e9d091f6070adb5ce98263c3 lib/HTML/FormHandler/Field/PasswordConf.pm
+SHA1 03d405be19d4c5638816c1c9e640330a1a65bcfc lib/HTML/FormHandler/Field/PosInteger.pm
+SHA1 88f779565617a14dcf744c5e03f1ecc5d5a50687 lib/HTML/FormHandler/Field/PrimaryKey.pm
+SHA1 d4e387d9b2adcc16162f718d6241386820b9a1df lib/HTML/FormHandler/Field/Repeatable.pm
+SHA1 d0ca3e346b7a865e85574ff51d0e68e7608004e9 lib/HTML/FormHandler/Field/Repeatable/Instance.pm
+SHA1 08c4fa6ac8a9d2c3ab32b558ea18e2fa5ae13d12 lib/HTML/FormHandler/Field/Reset.pm
+SHA1 cbe5cc8c42a12cc23f6e1afc42f6d2d2c83fba84 lib/HTML/FormHandler/Field/Result.pm
+SHA1 2e27424184b43db89f014cf078ecfe5c48abd2d1 lib/HTML/FormHandler/Field/Second.pm
+SHA1 3bcb5caad2343218f0aca303afb3bbb8f4091b21 lib/HTML/FormHandler/Field/Select.pm
+SHA1 ef59a176b136782c5882c804f8dfa69356dd0eac lib/HTML/FormHandler/Field/Submit.pm
+SHA1 eeeb89b7cd496035be8f645a64f6a564ef126a6c lib/HTML/FormHandler/Field/Text.pm
+SHA1 0bb33a3f49598e90de30dc95c704868760f98f7a lib/HTML/FormHandler/Field/TextArea.pm
+SHA1 d2f80778ce58f3b79f15e2331edb90ea9eade127 lib/HTML/FormHandler/Field/Upload.pm
+SHA1 4f407dc41c867568709bb0e9c58937d33192420f lib/HTML/FormHandler/Field/Weekday.pm
+SHA1 5c115d5caab6859f57461d300ca42c9922b74759 lib/HTML/FormHandler/Field/Year.pm
+SHA1 727f4264fb28e7b736c7f019c8e7e342ef1105a1 lib/HTML/FormHandler/Fields.pm
+SHA1 5ae3405996ca1d7100985584bbf8d9ea871440ef lib/HTML/FormHandler/I18N.pm
+SHA1 bd862cdb259ea889994669b336674e61d167c00b lib/HTML/FormHandler/I18N/de_de.pm
+SHA1 ce937e3191a2f2edbfea5b8f5a897ad275b46953 lib/HTML/FormHandler/I18N/en_us.pm
+SHA1 68401849b468a0caac427b2b17647493f48a4c07 lib/HTML/FormHandler/I18N/hu_hu.pm
+SHA1 806e36d1db030efc81fc9ce3a940c7c21666f257 lib/HTML/FormHandler/I18N/ru_ru.pm
+SHA1 7e772d5b65d5b2d5b62d60a2c1f7ebbd6e1904ba lib/HTML/FormHandler/I18N/tr_tr.pm
+SHA1 cabde664ff88c444f917d6dc47cc75a69f35f78c lib/HTML/FormHandler/I18N/ua_ua.pm
+SHA1 53dda366d12ce1ae12183177c9c91baa65fcdd70 lib/HTML/FormHandler/InitResult.pm
+SHA1 ee75da28cc27e55cd69b9f742e46df9a9766a1af lib/HTML/FormHandler/Manual.pod
+SHA1 3b446a75a99306fae455a3f59b2de4d761f853b9 lib/HTML/FormHandler/Manual/Catalyst.pod
+SHA1 3d0d3a3de59f5915fbe0106cbe34c7f89e1fe595 lib/HTML/FormHandler/Manual/Cookbook.pod
+SHA1 359023c4eb7d223da63c65cf7c692d3a3bb3a6c1 lib/HTML/FormHandler/Manual/Intro.pod
+SHA1 5933ec9372fe38a3bd6cf2009c41de6fd6fc2629 lib/HTML/FormHandler/Manual/Reference.pod
+SHA1 18067d00861e4755aa077d7729784225b70dce62 lib/HTML/FormHandler/Manual/Rendering.pod
+SHA1 ee0376cceab360ffb22fa9f769b1dea4f5a97559 lib/HTML/FormHandler/Manual/Templates.pod
+SHA1 02bb29fe5221366fffde84c3b3d4c4f5e4883b1f lib/HTML/FormHandler/Manual/Tutorial.pod
+SHA1 6f64dd17f963993a550a7e9056a8a4198d0f9c9f lib/HTML/FormHandler/Meta/Role.pm
+SHA1 8cafdeb722f63c188ef4616f2ecc6d34a2803d9b lib/HTML/FormHandler/Model.pm
+SHA1 66ba233ecb4de02ac88243dc5e4f547c49304fc5 lib/HTML/FormHandler/Model/CDBI.pm
+SHA1 fe6fc07e5d9c980343dcfd4482ef0d277583cf88 lib/HTML/FormHandler/Model/Object.pm
+SHA1 1c2900b22cd5c76dfeb75a8ab83d3c1e371adddb lib/HTML/FormHandler/Moose.pm
+SHA1 48de719c0124d4c04b0dc0853d1f8cf12c56f33a lib/HTML/FormHandler/Moose/Role.pm
+SHA1 bdff28f78bae404eeed2d93946af8f46b9d1518e lib/HTML/FormHandler/Page.pm
+SHA1 3a09f6a9fe2fb54ffdf77c1c18545bd4f0882745 lib/HTML/FormHandler/Page/Simple.pm
+SHA1 aa1b9169b50a348158378d04fb39fab0aea669c9 lib/HTML/FormHandler/Pages.pm
+SHA1 07ea579abdea417a35420d53a9bf71256fe84904 lib/HTML/FormHandler/Params.pm
+SHA1 be2f09fa981debe3d75511c13ca3a2bc1ef59832 lib/HTML/FormHandler/Render/Simple.pm
+SHA1 be4a641158dab2668a21f7e1b0e0eaa3e6878322 lib/HTML/FormHandler/Render/Table.pm
+SHA1 a7a958e6baa54614c0da823ed223d0f2ec665016 lib/HTML/FormHandler/Render/WithTT.pm
+SHA1 7cdb42bfea8a6ebb441e0da9c119d0e151f88649 lib/HTML/FormHandler/Result.pm
+SHA1 e2de28325e05efb903cfd7fa7bc8b7ecde886fa3 lib/HTML/FormHandler/Result/Role.pm
+SHA1 0a5ac0d71f9f9d7b0f9c3a7b255ebbc1d6fbd3f7 lib/HTML/FormHandler/TraitFor/Captcha.pm
+SHA1 d8469c8dda1769400b1cd4c1d82a60ed1109b42b lib/HTML/FormHandler/TraitFor/I18N.pm
+SHA1 e2c5f0166107d295c892653e10d16d6f19d6033a lib/HTML/FormHandler/Traits.pm
+SHA1 f6647c19877e269d8a3e5fddec4480b884eb48a1 lib/HTML/FormHandler/Types.pm
+SHA1 80a96d5f3eee8fd555e80dc8fb989f3e5e3f34cc lib/HTML/FormHandler/Validate.pm
+SHA1 22fe304ed72ac9dc61df52b3c2fd7452f0878583 lib/HTML/FormHandler/Widget/ApplyRole.pm
+SHA1 27d246f55c882d557842d8b9997c4ee65d46d072 lib/HTML/FormHandler/Widget/Field/Button.pm
+SHA1 6211a08c879d8b99df65205ad5df0912a730bcbe lib/HTML/FormHandler/Widget/Field/Checkbox.pm
+SHA1 00ebf5455e0bc4c834b497f8fac73fc177bda228 lib/HTML/FormHandler/Widget/Field/CheckboxGroup.pm
+SHA1 ba604c3f603a51ed31ce4bfe31b023dcfea3cc4d lib/HTML/FormHandler/Widget/Field/Compound.pm
+SHA1 6ba3ae0972f99c25b22438eab962dc38ad89caec lib/HTML/FormHandler/Widget/Field/Hidden.pm
+SHA1 ea641d348079ee4beed937ecf28678162227967a lib/HTML/FormHandler/Widget/Field/NoRender.pm
+SHA1 1703b1195e8cf3c56d0a5f9c76e52c3f03cbc52a lib/HTML/FormHandler/Widget/Field/Password.pm
+SHA1 cdd81f0eb24f321807da184dc0e5ad69283be06a lib/HTML/FormHandler/Widget/Field/RadioGroup.pm
+SHA1 8bfdbe8b0ac418f303de8157501ea11679fd39cf lib/HTML/FormHandler/Widget/Field/Repeatable.pm
+SHA1 60e4aafc8431e4677912bcc9bb281ef8bd1b7917 lib/HTML/FormHandler/Widget/Field/Reset.pm
+SHA1 ab357fa2635adbbfe987f3e1f2c9c1b1b38d484e lib/HTML/FormHandler/Widget/Field/Role/HTMLAttributes.pm
+SHA1 fa852f70d48013d6886204b699b6ee41433f82c2 lib/HTML/FormHandler/Widget/Field/Role/SelectedOption.pm
+SHA1 b19b6dbd38c3865794b3a23863087d88458dcc7a lib/HTML/FormHandler/Widget/Field/Select.pm
+SHA1 0366a5d4b6bf854bb0511eb22242268eb35a002b lib/HTML/FormHandler/Widget/Field/Submit.pm
+SHA1 14b8193ffcf7f60e043b4b0f6d5cb9eff67e11cd lib/HTML/FormHandler/Widget/Field/Text.pm
+SHA1 ed1cbd62b1092e52d1619343a699cea7c6bf7eb9 lib/HTML/FormHandler/Widget/Field/Textarea.pm
+SHA1 48e2cf98eb4aeb3eb04182a05af99287988d6093 lib/HTML/FormHandler/Widget/Field/Upload.pm
+SHA1 00f895e4a133778e7c6f29804ecc19fe4eb077d3 lib/HTML/FormHandler/Widget/Form/Role/HTMLAttributes.pm
+SHA1 b09b71d1619f62d3de154f8bd25f20e9b4cd4eb1 lib/HTML/FormHandler/Widget/Form/Simple.pm
+SHA1 dada13ac39870a11ed8878b0553c8e1f6d77ca76 lib/HTML/FormHandler/Widget/Form/Table.pm
+SHA1 7e79bae2ea42ebab8f75a3ef15c7c3e3cdcba58a lib/HTML/FormHandler/Widget/Wrapper/Base.pm
+SHA1 f1f9662dcec321c4423ec2421c2e14e8bb1145b4 lib/HTML/FormHandler/Widget/Wrapper/Fieldset.pm
+SHA1 99a0af18298478491366d8000a5ff043566545ac lib/HTML/FormHandler/Widget/Wrapper/None.pm
+SHA1 de08fc46bba202f97d1ab8cb66b93bc80e07caad lib/HTML/FormHandler/Widget/Wrapper/Simple.pm
+SHA1 db6e830a6fc53061cb5f6b673d223ed14170bf33 lib/HTML/FormHandler/Widget/Wrapper/SimpleInline.pm
+SHA1 fdcd8f9d693f7c1479a088498292ecf589038357 lib/HTML/FormHandler/Widget/Wrapper/Table.pm
+SHA1 0b99e5bad222a87430b83ac87dc3250f6a3bb6d8 lib/HTML/FormHandler/Widget/Wrapper/TableInline.pm
+SHA1 76a32c4d47a182f8314a9cad8d42af0b5ef59e8a lib/HTML/FormHandler/Wizard.pm
 SHA1 2feb6b79d4067908ddbd31bcc3b16b5c985c7317 share/templates/form.tt
 SHA1 76f3e3ab9d9eee7a6905de342f389e09c3ba4db7 share/templates/widget/button.tt
 SHA1 23b56c71b85d991822f9aee41b212ff5a771711d share/templates/widget/checkbox.tt
@@ -151,6 +153,7 @@ SHA1 b5caf79791036188da09eb6f687fda432f908657 share/templates/widget/textarea.tt
 SHA1 95a5a44cf72244e6abebd50fa7dc666440c625e7 share/templates/widget/upload.tt
 SHA1 d55b2da9ebb18c4da78ae398a555d19728397acd t/01app.t
 SHA1 35d1f710ceefee28f2f2a7c2607fe6d8817feadf t/build_id.t
+SHA1 f79bd28f8c46f9ed5377912104bb2f39be9afbe2 t/circular_refs.t
 SHA1 9489e970b3d3f5bd0ca82ba7704a0589546d278c t/composed.t
 SHA1 55d1bdda5802314b2776313c5596457765760a4c t/compound_field.t
 SHA1 4cb483d5b32088354959504d5a905150bd35e5e8 t/constraints.t
@@ -159,14 +162,14 @@ SHA1 db981319c81a63199378d74bafaa042b4e4c5f16 t/defaults.t
 SHA1 f0c7b7e1de8669c7dda7fcbfc88c88ee83e558f9 t/deflate.t
 SHA1 67c6959a7f2136798c11e7b7c13a2dd339108f86 t/dependency.t
 SHA1 f6d1ddf31d2715bc0e0fae057905658bd9234cb1 t/dynamic.t
-SHA1 2be975e74844f677884b63053fc2dc4826777fb6 t/errors.t
+SHA1 c98c4d8227dfaf77817afd6b5ab7f29248312bfc t/errors.t
 SHA1 84cbaf51c785a855f86e09a75810826b013b74ff t/field_item.t
-SHA1 73a9fe74f86d851787f7a6ce2e860b4a17650581 t/field_traits.t
+SHA1 d92637d1b3778d0a4237eadc585ed93313669dba t/field_traits.t
 SHA1 9df70077085901fa5697d58e3929c17c16f367ac t/field_types.t
 SHA1 f0d498d0ec8276a4bf6c3df3172584a5dd876e73 t/fields.t
 SHA1 e77fc6b8b02f7517e07abbaa963390d58b0d2029 t/filters.t
 SHA1 5ab405305432299244ed7a2cac374e52852b65e2 t/form_handler.t
-SHA1 f99e13a0fb4d8ba5ff51f84b2491278218779754 t/form_options.t
+SHA1 bdb12d93e67c84fad3e642ac86124c900568742f t/form_options.t
 SHA1 1c7e3714c63b6ca0f42bad837b9fde746bcfac2c t/formhandlerx.t
 SHA1 7ff46198ffd967b30d0999b10ff80fc08bef0770 t/has_field.t
 SHA1 8b58baf90cdbb31f699df1b01343bb008e046f82 t/has_field_arrayref.t
@@ -201,8 +204,9 @@ SHA1 5390fbb14f7e14a1196e962e388d18cc4cafba61 t/render_form_errors.t
 SHA1 bef13448710957b177666eff70a58673a1b38b7d t/render_html_attributes.t
 SHA1 d982d9e380c9d73992708f2ed7da728dcbf0812e t/render_result.t
 SHA1 8b405631abeae7f814d923852ff6821eeea6b33f t/render_table.t
-SHA1 c8fe20c36577949e3fe3fccbe51de8998c00126c t/render_widgets.t
+SHA1 334ad8cb279d0d73c35576ba0ab27676ab8fd7fe t/render_widgets.t
 SHA1 66fc1b48eb105777b4ebf11189f7b35533f29d47 t/render_withtt.t
+SHA1 ac6e1d96589f66cf2f13f4b7c883b7b6a46b7b73 t/rep_nest.t
 SHA1 27bb7901f2f5b8612e014c8013ef28cf8924ff2d t/reprender.t
 SHA1 a98bd1e8013013d26ca7ecd2bdcac079969a255a t/req_message.t
 SHA1 3422cd5aac318955cd48a51439875bcf859e9043 t/result.t
@@ -242,7 +246,7 @@ SHA1 adab33636d288b5fea945c325dc964c5937cb7f5 xt/upload.t
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.10 (Darwin)
 
-iF4EAREIAAYFAk1kH7IACgkQlX0ZOkgCucgkiAD+JEu6MFkJCjhN6dnON7dRrRaN
-YriIuu53by5XRulsfXoA/0/GmNlpVfT9bDH+0duXW4gJp1PhLMj3/p/rCCbgrKgm
-=/Pwl
+iF4EAREIAAYFAk3RaH8ACgkQlX0ZOkgCucgI9AD/bRUkW6smMfO+bDTmXNPxMqXX
+3xrXJngQcX5zZVaGFjMA/32KNu7K4lAuwnKqC0TTQsDDt+8mmXgMURH8ES8sP3YZ
+=MBL3
 -----END PGP SIGNATURE-----
@@ -1,5 +1,4 @@
   Improve TT rendering
-  Refactor messages to set in one place and make translations easier
   Unique support for non-top-level fields?
   Improve example of Repeatable form (BookDB, User) to do adds & deletes with js
   Create more usable 'add_field' routine that will handle ordering, parent,
@@ -7,7 +7,7 @@ license          = Perl_5
 copyright_holder = Gerda Shank 
 copyright_year   = 2010
 
-version = 0.33002
+version = 0.34001
 
 [@Basic]
 [InstallGuide]
@@ -31,7 +31,7 @@ repository.type   = git
 
 [Prereqs]
 Carp                       = 0
-Moose                      = 0.90
+Moose                      = 2.0007
 Locale::Maketext           = 1.09
 DateTime                   = 0
 DateTime::Format::Strptime = 0
@@ -49,6 +49,7 @@ Email::Valid               = 0
 Test::More                 = 0.94
 Test::Differences          = 0
 Test::Exception            = 0
+Test::Memory::Cycle        = 1.04
 
 ; If you're using git, this is interesting
 ; You need to install Dist::Zilla::PluginBundle::Git
@@ -15,7 +15,7 @@ HTML::FormHandler::Base - stub
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -245,7 +245,6 @@ sub new_field_with_traits {
     my ( $self, $class, $field_attr ) = @_;
 
     my $widget = $field_attr->{widget};
-    my $field;
     unless( $widget ) {
         my $attr = $class->meta->find_attribute_by_name( 'widget' );
         if ( $attr ) {
@@ -270,12 +269,9 @@ sub new_field_with_traits {
         push @traits, $widget_role, $wrapper_role;
     }
     if( @traits ) {
-        my $new_class = $class->with_traits( @traits );
-        $field = $new_class->new( %{$field_attr} );
-    }
-    else {
-        $field = $class->new( %{$field_attr} );
+        $class = $class->with_traits( @traits );
     }
+    my $field = $class->new( %{$field_attr} );
     if( $field->form ) {
         foreach my $key ( keys %{$field->form->widget_tags} ) {
             $field->set_tag( $key, $field->form->widget_tags->{$key} )
@@ -297,7 +293,7 @@ HTML::FormHandler::BuildFields - role to build field array
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -235,7 +235,7 @@ HTML::FormHandler::BuildPages - used in Wizard
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -27,7 +27,7 @@ HTML::FormHandler::Field::Boolean - a true or false field
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -22,7 +22,7 @@ HTML::FormHandler::Field::Button - button field
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -101,7 +101,7 @@ HTML::FormHandler::Field::Captcha - captcha field with GD::SecurityImage
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -36,7 +36,7 @@ HTML::FormHandler::Field::Checkbox - a checkbox field type
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -85,7 +85,7 @@ HTML::FormHandler::Field::Compound - field consisting of subfields
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -113,7 +113,7 @@ HTML::FormHandler::Field::Date - a date field with formats
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SUMMARY
 
@@ -20,7 +20,7 @@ HTML::FormHandler::Field::DateMDY - m/d/y date field
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -71,7 +71,7 @@ HTML::FormHandler::Field::DateTime - compound DateTime field
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -73,7 +73,7 @@ HTML::FormHandler::Field::Display - display only field
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -52,7 +52,7 @@ HTML::FormHandler::Field::Duration - DateTime::Duration from HTML form values
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SubFields
 
@@ -47,7 +47,7 @@ HTML::FormHandler::Field::Email - validates email using Email::Valid
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -21,7 +21,7 @@ HTML::FormHandler::Field::Hidden - hidden field
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -22,7 +22,7 @@ HTML::FormHandler::Field::Hour - accept integer from 0 to 23
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -82,7 +82,7 @@ HTML::FormHandler::Field::HtmlArea - input HTML in a textarea
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -42,7 +42,7 @@ HTML::FormHandler::Field::IntRange - integer range in select list
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -53,7 +53,7 @@ HTML::FormHandler::Field::Integer - validate an integer value
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -23,7 +23,7 @@ HTML::FormHandler::Field::Minute - input range from 0 to 59
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -58,7 +58,7 @@ HTML::FormHandler::Field::Money - US currency-like values
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -22,7 +22,7 @@ HTML::FormHandler::Field::Month - select list 1 to 12
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -22,7 +22,7 @@ HTML::FormHandler::Field::MonthDay - select list 1 to 31
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -38,7 +38,7 @@ HTML::FormHandler::Field::MonthName - select list with month names
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -11,18 +11,15 @@ has '+size'     => ( default => 5 );
 sub sort_options {
     my ( $self, $options ) = @_;
 
-    my $value = $self->value;
+    return $options unless scalar @$options && defined $self->value;
+    my $value = $self->deflate($self->value);
+    return $options unless scalar @$value;
     # This places the currently selected options at the top of the list
     # Makes the drop down lists a bit nicer
-    if ( @$options && defined $value ) {
-        my %selected = map { $_ => 1 } ref($value) eq 'ARRAY' ? @$value : ($value);
-
-        my @out = grep { $selected{ $_->{value} } } @$options;
-        push @out, grep { !$selected{ $_->{value} } } @$options;
-
-        return \@out;
-    }
-    return $options;
+    my %selected = map { $_ => 1 } @$value;
+    my @out = grep { $selected{ $_->{value} } } @$options;
+    push @out, grep { !$selected{ $_->{value} } } @$options;
+    return \@out;
 }
 
 
@@ -39,7 +36,7 @@ HTML::FormHandler::Field::Multiple - multiple select list
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -20,7 +20,7 @@ HTML::FormHandler::Field::Nested - for nested elements of compound fields
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -61,7 +61,7 @@ HTML::FormHandler::Field::NoValue - base class for submit field
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -64,7 +64,7 @@ HTML::FormHandler::Field::Password - password field
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -54,7 +54,7 @@ HTML::FormHandler::Field::PasswordConf - password confirmation
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -43,7 +43,7 @@ HTML::FormHandler::Field::PosInteger - positive integer field
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -21,7 +21,7 @@ HTML::FormHandler::Field::PrimaryKey - primary key field
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -27,7 +27,7 @@ HTML::FormHandler::Field::Repeatable::Instance - used internally by repeatable f
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -208,6 +208,8 @@ before 'value' => sub {
     my @pk_elems =
         map { $_->accessor } grep { $_->has_flag('is_primary_key') } $self->contains->all_fields
         if $self->contains->has_flag('is_compound');
+
+    return [] unless $self->has_value;
     my $value = $self->result->value;
     my @new_value;
     foreach my $element ( @{$value} ) {
@@ -239,7 +241,7 @@ HTML::FormHandler::Field::Repeatable - repeatable (array) field
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -22,7 +22,7 @@ HTML::FormHandler::Field::Reset - reset field
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -62,7 +62,7 @@ HTML::FormHandler::Field::Result - result class for fields
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -22,7 +22,7 @@ HTML::FormHandler::Field::Second - select list 0 to 59
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -68,6 +68,9 @@ sub _form_options {
 }
 
 has 'multiple'         => ( isa => 'Bool', is => 'rw', default => '0' );
+# following is for unusual case where a multiple select is a has_many type relation
+has 'has_many'         => ( isa => 'Str', is => 'rw' );
+has '+deflate_to'      => ( default => 'fif' );
 has 'size'             => ( isa => 'Int|Undef', is => 'rw' );
 has 'label_column'     => ( isa => 'Str',       is => 'rw', default => 'name' );
 has 'localize_labels'  => ( isa => 'Bool', is => 'rw' );
@@ -142,6 +145,9 @@ sub _inner_validate_field {
 
     # create a lookup hash
     my %options = map { $_->{value} => 1 } @{ $self->options };
+    if( $self->has_many ) {
+        $value = [map { $_->{$self->has_many} } @$value];
+    }
     for my $value ( ref $value eq 'ARRAY' ? @$value : ($value) ) {
         unless ( $options{$value} ) {
             $self->add_error($self->get_message('select_invalid_value'), $value);
@@ -221,13 +227,35 @@ sub _load_options {
 sub sort_options { shift; return shift; }
 
 before 'value' => sub {
-    my $self = shift;
+    my $self  = shift;
+
+    return undef unless $self->has_result;
     my $value = $self->result->value;
-    if( $self->multiple && (!defined $value || $value eq '') ) {
-        $self->_set_value([]);
+
+    if( $self->multiple ) {
+        if ( !defined $value || $value eq '' ) {
+            $self->_set_value( [] );
+        }
+        elsif ( $self->has_many && scalar @$value && ref($value->[0]) ne 'HASH' ) {
+            my @new_values;
+            foreach my $ele (@$value) {
+                push @new_values, { $self->has_many => $ele };
+            }
+            $self->_set_value( \@new_values );
+        }
     }
 };
 
+sub deflate {
+    my ( $self, $value ) = @_;
+
+    return $value unless ( $self->has_many && $self->multiple );
+
+    # the following is for the edge case of a has_many select
+    return $value unless ref($value) eq 'ARRAY' && scalar @$value && ref($value->[0]) eq 'HASH'; 
+    return [map { $_->{$self->has_many} } @$value];
+}
+
 __PACKAGE__->meta->make_immutable;
 use namespace::autoclean;
 1;
@@ -241,7 +269,7 @@ HTML::FormHandler::Field::Select - select fields
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -459,6 +487,21 @@ This does a string compare.
 Customize 'select_invalid_value' and 'select_not_multiple'. Though neither of these
 messages should really be seen by users in a properly constructed select.
 
+=head1 Database relations
+
+Also see L<HTML::FormHandler::TraitFor::Model::DBIC>.
+
+The single select is for a DBIC 'belongs_to' relation. The multiple select is for
+a 'many_to_many' relation.
+
+There is very limited ability to do multiple select with 'has_many' relations.
+It will only work in very specific circumstances, and requires setting
+the 'has_many' attribute to the name of the primary key of the related table.
+This is a somewhat peculiar data structure for a relational database, and may
+not be what you really want. A 'has_many' is usually represented with a Repeatable
+field, and may require custom code if the form structure doesn't match the database
+structure. See L<HTML::FormHandler::Manual::Cookbook>.
+
 =head1 AUTHOR
 
 FormHandler Contributors - see HTML::FormHandler
@@ -29,7 +29,7 @@ HTML::FormHandler::Field::Submit - submit field
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -71,7 +71,7 @@ HTML::FormHandler::Field::Text - text field
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -23,7 +23,7 @@ HTML::FormHandler::Field::TextArea - textarea input
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 Summary
 
@@ -87,7 +87,7 @@ HTML::FormHandler::Field::Upload - file upload field
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -33,7 +33,7 @@ HTML::FormHandler::Field::Weekday - select list day of week strings
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -33,7 +33,7 @@ HTML::FormHandler::Field::Year - year selection list
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -15,7 +15,7 @@ our $VERSION = '0.02';
 
 has 'name' => ( isa => 'Str', is => 'rw', required => 1 );
 has 'type' => ( isa => 'Str', is => 'rw', default => sub { ref shift } );
-has 'parent' => ( is  => 'rw',   predicate => 'has_parent' );
+has 'parent' => ( is  => 'rw',   predicate => 'has_parent', weak_ref => 1 );
 sub has_fields { }
 has 'input_without_param' => (
     is        => 'rw',
@@ -71,26 +71,20 @@ sub build_result {
 
 sub input {
     my $self = shift;
+
+    # allow testing fields individually by creating result if no form
+    return undef unless $self->has_result || !$self->form; 
     my $result = $self->result;
-    # garbage collection should not happen
-    # but just in case resetting for safety
-    unless ( $result ) {
-        $self->clear_result;
-        $result = $self->result;
-    }
     return $result->_set_input(@_) if @_;
     return $result->input;
 }
 
 sub value {
     my $self = shift;
+
+    # allow testing fields individually by creating result if no form
+    return undef unless $self->has_result || !$self->form; 
     my $result = $self->result;
-    # garbage collection should not happen
-    # but just in case resetting for safety
-    unless ( $result ) {
-        $self->clear_result;
-        $result = $self->result;
-    }
     return $result->_set_value(@_) if @_;
     return $result->value;
 }
@@ -711,7 +705,7 @@ HTML::FormHandler::Field - base class for fields
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -13,6 +13,7 @@ has 'fields' => (
     handles   => {
         all_fields => 'elements',
         clear_fields => 'clear',
+        add_field => 'push',
         push_field => 'push',
         num_fields => 'count',
         has_fields => 'count',
@@ -33,10 +34,6 @@ sub add_error_field {
 }
 sub num_error_fields { shift->result->num_error_results }
 
-sub add_field {
-    shift->push_field(@_);
-}
-
 has 'field_name_space' => (
     isa     => 'Str|ArrayRef[Str]|Undef',
     is      => 'rw',
@@ -201,7 +198,7 @@ HTML::FormHandler::Fields - internal role for form and compound fields
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -109,7 +109,7 @@ HTML::FormHandler::I18N::de_de - German message translations
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -25,7 +25,7 @@ HTML::FormHandler::I18N::en_us - base message file
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -110,7 +110,7 @@ HTML::FormHandler::I18N::hu_hu - Hungarian message file
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -109,7 +109,7 @@ HTML::FormHandler::I18N::ru_ru - Russian message file
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -109,7 +109,7 @@ HTML::FormHandler::I18N::tr_tr - Turkish message file
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -109,7 +109,7 @@ HTML::FormHandler::I18N::ua_ua - Ukrainian message file
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -31,7 +31,7 @@ HTML::FormHandler::I18N - internationalization
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -111,7 +111,13 @@ sub _get_value {
     if( $field->_can_deflate && $field->deflate_to eq 'value' ) {
         @values = $field->_apply_deflation(@values);
     }
-    my $value = @values > 1 ? \@values : shift @values;
+    my $value;
+    if( $field->has_flag('multiple')) {
+        $value = scalar @values == 1 && ! defined $values[0] ? [] : \@values;
+    }
+    else {
+        $value = @values > 1 ? \@values : shift @values;
+    }
     return $value;
 }
 
@@ -127,7 +133,7 @@ HTML::FormHandler::InitResult - internal code
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -11,7 +11,7 @@ HTML::FormHandler::Manual::Catalyst - using HFH forms in Catalyst
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -11,7 +11,7 @@ HTML::FormHandler::Manual::Cookbook - FormHandler use recipes
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -721,6 +721,41 @@ method:
         $self->field('foo')->default('my_form');
     }
 
+=head2 Static form, dynamic field IDs
+
+The problem: you have a form that will be used in multiple places on a page, but you don't
+want to use a static form instead of doing 'new' for each. You can pass a form name in
+on the process call and use 'html_prefix' in the form:
+
+   $form->process( name => '...', params => {} );
+
+But the field 'id' attribute has already been constructed and doesn't change.
+
+Solution: apply a role to the base field class to replace the 'id' getter for the 'id'
+attribute with a method which constructs the 'id' dynamically. Since the role is
+being applied to the base field class, you can't just use 'sub id', because the 
+'id' method defined by the 'id' attribute has precedence. So create an 'around'
+method modifier that replaces it in the role.
+
+    package My::DynamicFieldId;
+    use Moose::Role;
+    around 'id' => sub {
+        my $orig = shift;
+        my $self = shift;
+        my $form_name = $self->form->name;
+        return $form_name . "." . $self->full_name;
+    };
+
+    package My::CustomIdForm;
+    use HTML::FormHandler::Moose;
+    extends 'HTML::FormHandler';
+
+    has '+html_prefix' => ( default => 1 );
+    has '+field_traits' => ( default => sub { ['My::DynamicFieldId'] } );
+
+    has_field 'foo';
+    has_field 'bar';
+
 =head1 AUTHOR
 
 FormHandler Contributors - see HTML::FormHandler
@@ -11,7 +11,7 @@ HTML::FormHandler::Manual::Intro - introduction to using FormHandler
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SUMMARY
 
@@ -12,7 +12,7 @@ HTML::FormHandler::Manual::Reference - concise reference
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -11,7 +11,7 @@ HTML::FormHandler::Manual::Rendering - how to render with FormHandler
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -11,7 +11,7 @@ HTML::FormHandler::Manual::Templates - using templates
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -12,7 +12,7 @@ HTML::FormHandler::Manual::Tutorial - how to use FormHandler with Catalyst
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -13,7 +13,7 @@ HTML::FormHandler::Manual - index of the manual
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 DESCRIPTION
 
@@ -53,7 +53,7 @@ HTML::FormHandler::Meta::Role - field_list and apply_list
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -293,7 +293,7 @@ HTML::FormHandler::Model::CDBI - Class::DBI model class (non-functioning)
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -27,7 +27,7 @@ HTML::FormHandler::Model::Object - stub for Object model
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -63,7 +63,7 @@ HTML::FormHandler::Model - default model base class
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -57,7 +57,7 @@ HTML::FormHandler::Moose::Role - to add sugar to roles
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -67,7 +67,7 @@ HTML::FormHandler::Moose - to add FormHandler sugar
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -15,7 +15,7 @@ HTML::FormHandler::Page::Simple - used by Wizard
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -45,7 +45,7 @@ HTML::FormHandler::Page - used in Wizard
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -76,7 +76,7 @@ HTML::FormHandler::Pages - used in Wizard
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -134,7 +134,7 @@ HTML::FormHandler::Params - params handling
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -340,7 +340,7 @@ HTML::FormHandler::Render::Simple - simple rendering role
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -80,7 +80,7 @@ HTML::FormHandler::Render::Table - render a form with a table layout
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -91,7 +91,7 @@ HTML::FormHandler::Render::WithTT - tt rendering
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -97,7 +97,7 @@ HTML::FormHandler::Result::Role - role with common code for form & field results
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -72,7 +72,7 @@ HTML::FormHandler::Result - form result object
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -51,7 +51,7 @@ HTML::FormHandler::TraitFor::Captcha - generate and validate captchas
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -42,7 +42,7 @@ HTML::FormHandler::TraitFor::I18N - localization
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head3 language_handle, _build_language_handle
 
@@ -116,7 +116,7 @@ HTML::FormHandler::Traits - customized replacement for MooseX::Traits
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -171,7 +171,7 @@ HTML::FormHandler::Types - Moose type constraints
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -235,7 +235,7 @@ HTML::FormHandler::Validate - validation role (internal)
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -60,7 +60,7 @@ HTML::FormHandler::Widget::ApplyRole - role to apply widgets
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -15,7 +15,7 @@ sub render {
     my $output = '<input type="button" name="';
     $output .= $self->html_name . '"';
     $output .= ' id="' . $self->id . '"';
-    $output .= ' value="' . $self->html_filter($self->value) . '"';
+    $output .= ' value="' . $self->html_filter($self->_localize($self->value)) . '"';
     $output .= $self->_add_html_attributes;
     $output .= ' />';
     return $self->wrap_field( $result, $output );
@@ -32,7 +32,7 @@ HTML::FormHandler::Widget::Field::Button - button field rendering widget
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -33,7 +33,7 @@ HTML::FormHandler::Widget::Field::Checkbox - HTML attributes field role
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -57,7 +57,7 @@ HTML::FormHandler::Widget::Field::CheckboxGroup - checkbox group field role
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -34,7 +34,7 @@ HTML::FormHandler::Widget::Field::Compound - compound field widget
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -31,7 +31,7 @@ HTML::FormHandler::Widget::Field::Hidden - hidden field rendering widget
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -17,7 +17,7 @@ HTML::FormHandler::Widget::Field::NoRender - no rendering widget
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -32,7 +32,7 @@ HTML::FormHandler::Widget::Field::Password - password rendering widget
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -37,7 +37,7 @@ HTML::FormHandler::Widget::Field::RadioGroup - radio group rendering widget
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -28,7 +28,7 @@ HTML::FormHandler::Widget::Field::Repeatable - repeatable field widget
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -32,7 +32,7 @@ HTML::FormHandler::Widget::Field::Reset - reset field rendering widget
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -28,7 +28,7 @@ HTML::FormHandler::Widget::Field::Role::HTMLAttributes - apply HTML attributes
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -29,7 +29,7 @@ HTML::FormHandler::Widget::Field::Role::SelectedOption - allow setting options f
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -72,7 +72,7 @@ HTML::FormHandler::Widget::Field::Select - select field rendering widget
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -32,7 +32,7 @@ HTML::FormHandler::Widget::Field::Submit - submit field rendering widget
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -34,7 +34,7 @@ HTML::FormHandler::Widget::Field::Text - text field rendering widget
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -34,7 +34,7 @@ HTML::FormHandler::Widget::Field::Textarea - textarea rendering widget
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -29,7 +29,7 @@ HTML::FormHandler::Widget::Field::Upload - update field rendering widget
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -38,7 +38,7 @@ HTML::FormHandler::Widget::Form::Role::HTMLAttributes - set HTML attributes on t
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -78,7 +78,7 @@ HTML::FormHandler::Widget::Form::Simple - widget to render a form with divs
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -42,7 +42,7 @@ HTML::FormHandler::Widget::Form::Table - render a form with a table layout
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -36,7 +36,7 @@ HTML::FormHandler::Widget::Wrapper::Base - commong methods for widget wrappers
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -33,7 +33,7 @@ HTML::FormHandler::Widget::Wrapper::Fieldset - fieldset field wrapper
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -17,7 +17,7 @@ HTML::FormHandler::Widget::Wrapper::None - wrapper that doesn't wrap
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -7,6 +7,8 @@ use namespace::autoclean;
 with 'HTML::FormHandler::Widget::Wrapper::Base';
 
 
+has 'auto_fieldset' => ( isa => 'Bool', is => 'rw', lazy => 1, default => 1 );
+
 sub wrap_field {
     my ( $self, $result, $rendered_widget ) = @_;
     my $t;
@@ -20,8 +22,10 @@ sub wrap_field {
     $output .= $start_tag;
 
     if ( $is_compound ) {
-        $output .= '<fieldset class="' . $self->html_name . '">';
-        $output .= '<legend>' . $self->loc_label . '</legend>';
+        if( $self->auto_fieldset ) {
+            $output .= '<fieldset class="' . $self->html_name . '">';
+            $output .= '<legend>' . $self->loc_label . '</legend>';
+        }
     }
     elsif ( !$self->has_flag('no_render_label') && length( $self->label ) > 0 ) {
         $output .= $self->render_label;
@@ -31,7 +35,7 @@ sub wrap_field {
     $output .= qq{\n<span class="error_message">$_</span>}
         for $result->all_errors;
     $output .= '</fieldset>'
-        if $is_compound;
+        if ( $is_compound && $self->auto_fieldset );
 
     $output .= defined($t = $self->get_tag('wrapper_end')) ? $t : '</div>';
 
@@ -49,7 +53,7 @@ HTML::FormHandler::Widget::Wrapper::Simple - simple field wrapper
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -0,0 +1,69 @@
+package HTML::FormHandler::Widget::Wrapper::SimpleInline;
+# ABSTRACT: simple field wrapper
+
+use Moose::Role;
+use namespace::autoclean;
+
+with 'HTML::FormHandler::Widget::Wrapper::Base';
+
+
+has 'auto_fieldset' => ( isa => 'Bool', is => 'rw', lazy => 1, default => 1 );
+
+sub wrap_field {
+    my ( $self, $result, $rendered_widget ) = @_;
+
+    return $rendered_widget if $self->has_flag('is_compound');
+
+    my $t;
+    my $output = '';
+    my $start_tag = defined($t = $self->get_tag('wrapper_start')) ?
+        $t : '<div<%class%>>';
+    my $class  = $self->render_class($result);
+    $output .= "\n";
+    $start_tag =~ s/<%class%>/$class/g;
+    $output .= $start_tag;
+
+    if ( !$self->has_flag('no_render_label') && length( $self->label ) > 0 ) {
+        $output .= $self->render_label;
+    }
+
+    $output .= $rendered_widget;
+    $output .= qq{\n<span class="error_message">$_</span>}
+        for $result->all_errors;
+
+    $output .= defined($t = $self->get_tag('wrapper_end')) ? $t : '</div>';
+
+    return "$output\n";
+}
+
+1;
+
+__END__
+=pod
+
+=head1 NAME
+
+HTML::FormHandler::Widget::Wrapper::SimpleInline - simple field wrapper
+
+=head1 VERSION
+
+version 0.34001
+
+=head1 SYNOPSIS
+
+This works like the Simple Wrapper, except it doesn't wrap Compound
+fields.
+
+=head1 AUTHOR
+
+FormHandler Contributors - see HTML::FormHandler
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Gerda Shank.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
@@ -38,7 +38,7 @@ HTML::FormHandler::Widget::Wrapper::Table - wrapper class for table layout
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 AUTHOR
 
@@ -0,0 +1,51 @@
+package HTML::FormHandler::Widget::Wrapper::TableInline;
+# ABSTRACT: wrapper class for table layout that doesn't wrap compound fields
+
+use Moose::Role;
+with 'HTML::FormHandler::Widget::Wrapper::Base';
+
+sub wrap_field {
+    my ( $self, $result, $rendered_widget ) = @_;
+
+    return $rendered_widget if $self->has_flag('is_compound');
+
+    my $class  = $self->render_class($result);
+    my $output = "\n<tr$class>";
+    if ( !$self->has_flag('no_render_label') && length( $self->label ) > 0 ) {
+        $output .= '<td>' . $self->render_label . '</td>';
+    }
+    $output .= '<td>';
+    $output .= $rendered_widget;
+    $output .= qq{\n<span class="error_message">$_</span>} for $result->all_errors;
+    $output .= "</td></tr>\n";
+
+    return $output;
+}
+
+use namespace::autoclean;
+1;
+
+__END__
+=pod
+
+=head1 NAME
+
+HTML::FormHandler::Widget::Wrapper::TableInline - wrapper class for table layout that doesn't wrap compound fields
+
+=head1 VERSION
+
+version 0.34001
+
+=head1 AUTHOR
+
+FormHandler Contributors - see HTML::FormHandler
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Gerda Shank.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
@@ -108,7 +108,7 @@ HTML::FormHandler::Wizard - create a multi-page form
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -19,24 +19,19 @@ use Try::Tiny;
 use 5.008;
 
 # always use 5 digits after decimal because of toolchain issues
-our $VERSION = '0.33002';
+our $VERSION = '0.34001';
 
 
+# for consistency in api with field nodes
+sub form { shift }
+sub has_form { 1 }
+
 # Moose attributes
 has 'name' => (
     isa     => 'Str',
     is      => 'rw',
     default => sub { return 'form' . int( rand 1000 ) }
 );
-# for consistency in api with field nodes
-has 'form' => (
-    isa      => 'HTML::FormHandler',
-    is       => 'rw',
-    weak_ref => 1,
-    predicate => 'has_form',
-    lazy     => 1,
-    default  => sub { shift }
-);
 has 'parent' => ( is => 'rw' );
 has 'result' => (
     isa       => 'HTML::FormHandler::Result',
@@ -576,7 +571,7 @@ HTML::FormHandler - HTML forms using Moose
 
 =head1 VERSION
 
-version 0.33002
+version 0.34001
 
 =head1 SYNOPSIS
 
@@ -0,0 +1,49 @@
+use strict;
+use warnings;
+use Test::More;
+use Test::Memory::Cycle;
+
+{
+   package My::RepeatableForm;
+   use HTML::FormHandler::Moose;
+   extends 'HTML::FormHandler';
+
+   has '+name' => ( default => 'testform' );
+   has_field 'reqname' => ( required => 1 );
+   has_field 'entries' => (
+        type             => 'Repeatable',
+        required         => 1,
+        required_message => 'Request without entries not accepted'
+    );
+    has_field 'entries.rule_index' => ( type => 'PrimaryKey' );
+    has_field 'entries.foo' => (
+        type     => 'Text',
+        required => 1,
+    );
+    has_field 'entries.bar' => (
+        type     => 'Text',
+        required => 1,
+    );
+    has_field 'some_select' => ( type => 'Select', inactive => 1 );
+
+    sub update_model {
+        my $self = shift;
+        my $value = $self->field('some_select')->value;
+    }
+}
+
+my $form = new_ok( 'My::RepeatableForm' );
+
+my $params = {
+    reqname => 'Testrequest',
+    'entries.1.foo' => 'test1',
+    'entries.1.bar' => 'test1',
+    'entries.2.foo' => 'test2',
+    'entries.2.bar' => 'test2',
+};
+memory_cycle_ok( $form, 'form has no memory cycles before process' );
+ok( $form->process( params => $params ), 'form processed ok' );
+memory_cycle_ok( $form, 'form has no memory cycles after process' );
+
+done_testing;
+
@@ -3,6 +3,8 @@ use warnings;
 use Test::More;
 
 use_ok( 'HTML::FormHandler' );
+use HTML::FormHandler::I18N;
+$ENV{LANGUAGE_HANDLE} = HTML::FormHandler::I18N->get_handle('en_en');
 
 {
    package My::Form;
@@ -81,5 +81,35 @@ is( $form->field('baz')->html, "<h2>Pick something, quick!</h2>", 'new method wo
 is( $form->field('foo')->widget_attr, 'A Test!', 'widget attribute applied' );
 is( $form->field('foo')->render, 'A Test!', 'widget renders using attribute' );
 
+# the following test show that with application of a role to create
+# a field method 'id', you can have dynamically changed form names
+{
+    package My::FieldId;
+    use Moose::Role;
+    around 'id' => sub {
+        my $orig = shift;
+        my $self = shift;
+        my $form_name = $self->form->name;
+        return $form_name . "." . $self->full_name;
+    };
+}
+
+{
+    package My::CustomIdForm;
+    use HTML::FormHandler::Moose;
+    extends 'HTML::FormHandler';
+
+    has '+html_prefix' => ( default => 1 );
+    has '+field_traits' => ( default => sub { ['My::FieldId'] } );
+
+    has_field 'foo';
+    has_field 'bar';
+}
+
+$form = My::CustomIdForm->new;
+$form->process( name => 'Form123', params => {} );
+is( $form->field('foo')->id, 'Form123.foo', 'right field id' );
+$form->process( name => 'Form456', params => {} );
+is( $form->field('foo')->id, 'Form456.foo', 'right field id again' );
 
 done_testing;
@@ -165,4 +165,33 @@ is_deeply( $form->fif, { my_list => 2 }, 'fif is correct' );
 $rendered_field = $form->field('my_list')->render;
 like( $rendered_field, qr/<option value="2" id="my_list\.1" selected="selected">/, 'element is selected' );
 
+# following test is for 'has_many' select field flag
+{
+    package Test::HasMany;
+    use HTML::FormHandler::Moose;
+    extends 'HTML::FormHandler';
+
+    has_field 'foo' => ( default => 'my_foo' );
+    has_field 'hm_bar' => ( type => 'Multiple',
+        has_many => 'my_id', default => [3] );
+
+    sub options_hm_bar { [1, 2, 3, 4] }
+}
+$form = Test::HasMany->new;
+ok( $form, 'has many form built' );
+$form->process( params => {} );
+my $fif_expected = { foo => 'my_foo', hm_bar => [3] };
+is_deeply( $form->fif, $fif_expected, 'got expected fif' );
+$form->process( params => { foo => 'my_foo', hm_bar => [4] } );
+my $val_expected = { foo => 'my_foo', hm_bar => [ { my_id => 4 } ] };
+is_deeply( $form->value, $val_expected, 'got expected value' );
+$fif_expected = { foo => 'my_foo', hm_bar => [4] };
+is_deeply( $form->fif, $fif_expected, 'got expected fif' );
+$form->process( params => { foo => 'my_foo', hm_bar => [1,2] } );
+$fif_expected = { foo => 'my_foo', hm_bar => [1,2] };
+is_deeply( $form->fif, $fif_expected, 'got expected fif again' );
+$val_expected = { foo => 'my_foo', hm_bar => [ { my_id => 1 }, { my_id => 2 } ] };
+is_deeply( $form->value, $val_expected, 'got expected value agina' );
+
+
 done_testing;
@@ -381,4 +381,36 @@ is( $form->field('baz')->render, '
 <label class="label" for="baz">Baz: </label><input type="text" name="baz" id="baz" value="" />
 ', 'field renders with empty widget_tags' );
 
+{
+    package Test::Rendering;
+    use HTML::FormHandler::Moose;
+    extends 'HTML::FormHandler';
+
+    has_field 'my_comp' => ( type => 'Compound', widget_wrapper => 'SimpleInline' );
+    has_field 'my_comp.one';
+    has_field 'my_comp.two';
+    has_field 'my_alt' => ( type => 'Compound',  widget_wrapper => 'TableInline' );
+    has_field 'my_alt.one' => ( widget_wrapper => 'TableInline' );
+    has_field 'my_alt.two' => ( widget_wrapper => 'TableInline' );;
+
+}
+
+$form = Test::Rendering->new;
+my $expected = '
+<div><label class="label" for="my_comp.one">One: </label><input type="text" name="my_comp.one" id="my_comp.one" value="" /></div>
+
+<div><label class="label" for="my_comp.two">Two: </label><input type="text" name="my_comp.two" id="my_comp.two" value="" /></div>
+';
+my $out = $form->field('my_comp')->render;
+is( $out, $expected, 'compound field with inline wrapper' );
+
+is( $form->field('my_alt')->widget_wrapper, 'TableInline', 'widget wrapper works' );
+$expected = '
+<tr><td><label class="label" for="my_alt.one">One: </label></td><td><input type="text" name="my_alt.one" id="my_alt.one" value="" /></td></tr>
+
+<tr><td><label class="label" for="my_alt.two">Two: </label></td><td><input type="text" name="my_alt.two" id="my_alt.two" value="" /></td></tr>
+';
+$out = $form->field('my_alt')->render;
+is( $out, $expected, 'compound field with table inline wrapper' );
+
 done_testing;
@@ -0,0 +1,215 @@
+use strict;
+use warnings;
+use Test::More;
+
+# This test uses roles to create forms and fields
+# and nests the repeatables
+
+{
+    package Test::Form::Role::Employee;
+    use HTML::FormHandler::Moose::Role;
+
+    has_field 'first_name';
+    has_field 'last_name';
+    has_field 'email';
+    has_field 'password';
+}
+
+{
+    package Test::Form::Employee;
+    use HTML::FormHandler::Moose;
+    extends 'HTML::FormHandler';
+
+    with 'Test::Form::Role::Employee';
+}
+
+{
+    package Test::Form::Field::Employee;
+    use HTML::FormHandler::Moose;
+    extends 'HTML::FormHandler::Field::Compound';
+    
+    has_field 'id' => ( type => 'PrimaryKey' );
+    with 'Test::Form::Role::Employee';
+}
+
+{
+    package Test::Form::Role::Office;
+    use HTML::FormHandler::Moose::Role;
+
+    has_field 'address';
+    has_field 'city';
+    has_field 'state';
+    has_field 'zip';
+    has_field 'phone';
+    has_field 'fax';
+    has_field 'employees' => ( type => 'Repeatable' );
+    has_field 'employees.contains' =>  ( type =>  '+Test::Form::Field::Employee' );
+    
+}
+
+{
+    package Test::Form::Field::Office;
+    use HTML::FormHandler::Moose;
+    extends 'HTML::FormHandler::Field::Compound';
+
+    has_field 'id' => ( type => 'PrimaryKey' );
+    with 'Test::Form::Role::Office';
+
+}
+
+{
+    package Test::Form::Office;
+    use HTML::FormHandler::Moose;
+    extends 'HTML::FormHandler';
+    with 'Test::Form::Role::Office';
+
+}
+
+{
+    package Test::Form::Company;
+
+    use HTML::FormHandler::Moose;
+    extends 'HTML::FormHandler';
+
+    has '+item_class' => (
+        default => 'Company'
+    );
+
+    has_field 'name';
+    has_field 'username';
+    has_field 'tier';
+    has_field 'type';
+
+    has_field 'offices' => ( type => 'Repeatable' ); 
+    has_field 'offices.contains' => ( type => '+Test::Form::Field::Office' );
+
+}
+
+my $field = Test::Form::Field::Employee->new( name => 'test_employee' );
+ok( $field, 'field created' );
+is( $field->num_fields, 5, 'right number of fields' );
+
+my $form = Test::Form::Company->new;
+my $params = {
+    name => 'my_name',
+    username => 'a_user',
+    tier => 1,
+    type => 'simple',
+    offices => [
+        {
+            id => 1,
+            address => '101 Main St',
+            city => 'Smallville',
+            state => 'CA',
+            employees => [
+                {
+                    id => 1,
+                    first_name => 'John',
+                    last_name  => 'Doe',
+                    email      => 'jdoe@gmail.com',
+                }
+            ]
+        },
+    ] 
+};
+$form->process( params => $params );
+ok( $form, 'form built' );
+my $fif = $form->fif;
+my $value = $form->value;
+my $expected = {
+   'name' => 'my_name',
+   'offices.0.address' => '101 Main St',
+   'offices.0.city' => 'Smallville',
+   'offices.0.employees.0.email' => 'jdoe@gmail.com',
+   'offices.0.employees.0.first_name' => 'John',
+   'offices.0.employees.0.id' => 1,
+   'offices.0.employees.0.last_name' => 'Doe',
+   'offices.0.employees.0.password' => '',
+   'offices.0.fax' => '',
+   'offices.0.id' => 1,
+   'offices.0.phone' => '',
+   'offices.0.state' => 'CA',
+   'offices.0.zip' => '',
+   'tier' => 1,
+   'type' => 'simple',
+   'username' => 'a_user',
+};
+is_deeply( $fif, $expected, 'fif is correct' );
+is_deeply( $value, $params, 'value is correct' );
+
+# following takes some pieces of above tests and tests using
+# a Repeatable subclass
+{
+
+{
+    package Test::Form::Field::RepEmployee;
+    use HTML::FormHandler::Moose;
+    extends 'HTML::FormHandler::Field::Repeatable';
+    
+    has_field 'id' => ( type => 'PrimaryKey' );
+    with 'Test::Form::Role::Employee';
+}
+
+{
+    package Test::Form::Role::RepOffice;
+    use HTML::FormHandler::Moose::Role;
+
+    has_field 'address';
+    has_field 'city';
+    has_field 'state';
+    has_field 'zip';
+    has_field 'phone';
+    has_field 'fax';
+    has_field 'employees' => ( type => '+Test::Form::Field::RepEmployee' );
+    
+}
+
+{
+    package Test::Form::RepOffice;
+    use HTML::FormHandler::Moose;
+    extends 'HTML::FormHandler';
+    with 'Test::Form::Role::RepOffice';
+
+}
+
+my $field = Test::Form::Field::RepEmployee->new( name => 'test_employee' );
+ok( $field, 'field created' );
+is( $field->num_fields, 5, 'right number of fields' );
+
+my $form = Test::Form::RepOffice->new;
+my $params = {
+    address => '101 Main St',
+    city => 'Smallville',
+    state => 'CA',
+    employees => [
+        {
+            id => 1,
+            first_name => 'John',
+            last_name  => 'Doe',
+            email      => 'jdoe@gmail.com',
+        }
+    ]
+};
+$form->process( params => $params );
+ok( $form, 'form built' );
+my $fif = $form->fif;
+my $value = $form->value;
+my $expected = {
+   'address' => '101 Main St',
+   'city' => 'Smallville',
+   'employees.0.email' => 'jdoe@gmail.com',
+   'employees.0.first_name' => 'John',
+   'employees.0.id' => 1,
+   'employees.0.last_name' => 'Doe',
+   'employees.0.password' => '',
+   'fax' => '',
+   'phone' => '',
+   'state' => 'CA',
+   'zip' => '',
+};
+is_deeply( $fif, $expected, 'fif is correct' );
+is_deeply( $value, $params, 'value is correct' );
+
+}
+
+done_testing;